手机拍照自动抠图、秒变PS素材:华人团队做到了




现实里抠图,随手放到PS里?真实和虚拟之间又一堵墙被打破了,而华人团队是幕后功臣。

——

文|杜晨 编辑|Vicky Xiao

最近,一段模糊了虚拟和现实边界的黑科技视频在 Twitter 上爆红,目前已经获得了数万点赞和转推。







视频中,开发者 Cyril Diagne 用自己的手机拍下身边的绿枝、书本、衣服等物体,手机立刻把物体从画面中抠了出来。

接下来发生的事情更加神奇:他把手机摄像头对准电脑的屏幕,刚才抠出来的物体,竟然自动添加到了电脑正在运行的 Photoshop 上!

几秒钟前还在现实中的物体,竟然就这么被复制到了虚拟的世界里。

可能令许多摄影师、设计师朋友感到嫉妒的是,Diagne 的这一通操作是完全自动化的,并没有用到数据线,没碰键盘,也没用鼠标做任何调整——剪贴进去的图像,就这么准确地出现在他用手机瞄准的画面位置上。

Diagne 将这套非常神奇的抠图技术命名为 AR Cut & Paste(增强现实剪切粘贴)。目前针对 Photoshop 的支持已经开发出来了,不过他也表示其它软件也是可以支持的。

他也把 AR Cut & Paste 放到 GitHub 上开源了。从介绍和代码中我们得以一窥,这么有趣的技术,到底是怎么实现的。



秘诀:华人团队开发的图像识别模型



在抠图的阶段,AR Cut & Paste 使用的是一个名叫 BASNet 的深度神经网络。

在过去,机器学习领域在利用深度卷积神经网络进行物体识别方面,已经取得了非常不错的结果。不过通过神经网络进行的图像中物体识别,主要目标是区域准确性,而非边界准确性。

简单来说,就是这些物体识别技术,能够很准确地答出画面中的物体分别是什么:



但是想要准确画出识别出的物体的边框,就很难:






于是,加拿大阿尔伯塔大学的一个以华人为主的团队,开发出了一个全新的深度神经网络模型。

BASNet 的主要功能是进行显著性检测,简单来说,就是对画面中最显著的物体实现准确的边界划定,效果就像 PS 高手人工“抠图”一样。

BASNet 采用了预测-优化的思路,主要使用的是 Encoder-Decoder 网络结构,底层采用的是微软团队开发的残差网络 ResNet。

在预测部分,一个密集监督的 Encoder-Decoder 网络负责预测预测画面中物体的显著性,借助三种不同损失函数,让神经网络可以在像素 (pixel)、像素区域 (patch) 和全图 (map) 这三个层级上进行显著性判定,从而输出更准确的结果。

在优化部分,仍然是由 Encoder-Decoder 结构组装成一个残差优化模块 (RRM) ,对预测部分输出的显著图进一步优化。






从下图中可以看到,和其它同类和类似的物体识别模型相比,BASNet 的边界划定效果相对更加准确,和手动画出的标准答案最为接近。

不仅如此,BASNet 对于计算性能的优化做的也不错,可以在单一 GPU 上运行达到25帧每秒(需要你的电脑上有支持 CUDA 的 GPU)。







这篇论文在去年被计算机视觉方面的顶级学术会议 CVPR 2019 所收录。

BASNet 的开发团队来自于加拿大的阿尔伯塔大学计算机系。第一作者是该校机器人和视觉实验室的秦雪彬博士,曾经就读于山东农业大学和北京大学。

从网站上也能够很清楚地看出,在各种图像视频中进行物体显著性/边界划定,是秦雪彬最拿得出手的研究:




秦的团队还推出了一个性能更加强大的模型 U^2-Net,对于复杂物体边缘的识别准确度再上新台阶。这篇新论文目前已经被《模式识别》2020年收录。



现在我们知道了,AR Cut & Paste 是借助了 BASNet 这一深度神经网络实现了较为准确的抠图。接下来,开发者 Diagne 又是怎么实现将抠出来的图片直接隔空从手机“放置”到电脑上,而且准确放在手机瞄准位置的呢?

这里,Diagne 用了自己开发的一个小的玩意 ScreenPoint,简单来说就是在一张照片(手机传回的画面)上确定一个锚点,然后在对应的另一张照片(电脑的画面)上找到锚点对应的坐标。

这个小工具,利用的是 OpenCV 的 SIFT 功能。






目前,AR Cut & Paste 在剪切阶段的延迟大约为2.5秒,粘贴的延迟约为4秒。Diagne 也在 Twitter 上表示,还有很多方法能够进一步降低延迟,不过他并没有花更多时间做核心功能之外的优化。

技术实现的逻辑听上去并没有特别复杂,不过感谢强大的 BASNet,加上 Diagne 的脑洞,AR Cut & Paste 的实际使用效果还是很神奇的——特别是对于那些每天跟套索打交道的 Photoshop 用户来说……


AR Cut & Paste 上手配置

看到这里,相信你也已经按耐不住,想要自己上手玩一玩这套 AR Cut & Paste 了。

Diagne 在自己的 GitHub 提供了你需要的全部代码和一份简单的使用说明书。






总的来说,AR Cut & Paste 有三个独立的模块,需要配合使用:手机 app、安装在电脑上的本地服务器,以及打包好的 BASNet HTTP 服务。

手机是你的交互工具;本地服务器是手机和 Photoshop 之间数据传输的界面;物体检测、边界划定和背景移除的操作,发生在 BASNet HTTP 服务上。

在你的本地配置 AR Cut & Paste 需要一台手机,一台 GPU 支持 CUDA 的电脑;配置过程需要你有一定的 React Native 移动应用开发支持,电脑上有 Python 或 Docker 开发环境等。

1配置 Photoshop 插件远程连接

进入 Photoshop 的偏好设置 (Preference) > 插件 (Plug-ins),打开远程连接 (Remote Connection),并设置一个密码。

然后在 GitHub Repo 里找到 cyrildiagne/ar-cutpaste/server/src/ps.py,确认你的 Photoshop 设置和这个文件里是一样的,否则粘贴出来的会是一个空白的图层。

2打包 BASNet HTTP 服务

先克隆 cyrildiagne/basnet-http:

git clone https://github.com/cyrildiagne/BASNet-http.git

进入这个 repo,再把阿尔伯塔大学团队的 BASNet 克隆进去。

git clone https://github.com/NathanUA/BASNet

然后下载训练好的 BASNet 模型文件 basnet.pth(shorturl.at/FVZ19,下载地址也可以在 BASNet HTTP 打包工具的 GitHub 页面上找到),放到 BASNet/saved_models/basnet_bsi/ 路径下。

3配置本地服务器

然后就可以开始构建服务了,可以在本地使用 Python 运行环境 virtualenv(需要Python v3.6 或以上),也可以使用 Docker,具体操作方法在 GitHub 上都有。

然后就可以运行了服务器了,记得要输入打包好的 BASNet HTTP 服务的IP地址 (X.X.X.X),和之前第一步在 Photoshop 里设定的远程连接密码 (123456):

python src/main.py

--basnet_service_ip="http://X.X.X.X"

--basnet_service_host="basnet-http.default.example.com"

--photoshop_password 123456

4配置手机端

手机客户端是 Diagne 自己用 React Native 开发的 app。下载代码,安装,将手机端 components/Server.txt 文件里的 IP 地址指向到前一步配置的本地服务器和对应的端口即可,具体请参考 GitHub。




需要强调的是,目前 AR Cut & Paste 只是一个研究性质的圆形产品,并非面向消费者的和 Photoshop 工具,所以使用须谨慎,以免不必要的 Photoshop 资料丢失。

怎么样,你是不是已经跃跃欲试了呢?赶快行动起来吧!

推荐阅读